package com.zzh.ssm.controller;

import java.io.File;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.UUID;

import javax.servlet.http.HttpServletRequest;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.validation.ObjectError;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RequestMethod;
import org.springframework.web.bind.annotation.RequestParam;
import org.springframework.web.bind.annotation.ResponseBody;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.ModelAndView;

import com.zzh.ssm.controller.validation.ValidGroup1;
import com.zzh.ssm.exception.CustomException;
import com.zzh.ssm.po.ItemsCustom;
import com.zzh.ssm.po.ItemsQueryVo;
import com.zzh.ssm.service.ItemsService;

/**
 * @author zzh
 * @description 商品的controller
 * @date 2016年12月7日 下午8:40:01
 */
@Controller
// @RequestMapping("/items")
@RequestMapping(value = "/items", method = { RequestMethod.POST, RequestMethod.GET })
public class ItemsController {

	@Autowired
	private ItemsService itemsService;
	
	
	//商品分类   将方法的返回值放到request域中
	@ModelAttribute("itemtypes")
	public Map<String,String> getItemTypes(){	
		Map<String ,String> itemtypes = new  HashMap<String,String>();
		itemtypes.put("101", "数码");
		itemtypes.put("102", "母婴");
		
		return itemtypes;
	}
	
	
	
	// 商品查询
	@RequestMapping("/queryItems") // 可加可不加action
	public ModelAndView queryItems(HttpServletRequest request,ItemsQueryVo itemsQueryVo) throws Exception {
		
		//测试forward转发request共享
		System.out.println("id:"+request.getParameter("id"));
		System.out.println("name:"+request.getParameter("name"));
		// 调用service查询数据库，查询商品列表，这里使用静态数据模拟
		// List<Items> itemsList = new ArrayList<Items>();

		// 调用service查询数据库，查询商品列表，动态填充
		List<ItemsCustom> itemsList = itemsService.findItemsList(itemsQueryVo);
		
		// 返回ModelAndView
		System.out.println(itemsList);
		ModelAndView modelAndView = new ModelAndView();
		// 相当于request的setAttribute,在jsp中通过itemsList提取数据
		modelAndView.addObject("itemsList", itemsList);
		// 指定视图 // /WEB-INF/jsp/items/itemsList.jsp
		modelAndView.setViewName("items/itemsList");

		return modelAndView;

	}

	// 商品信息修改页面显示
	// @RequestMapping("/editItems")
	// public ModelAndView editItems() throws Exception {
	//
	// // 调用service查询商品信息根据id
	// ItemsCustom ic = itemsService.findItemsById(1);
	//
	// ModelAndView mad = new ModelAndView();
	// // 将商品信息放入mad
	// mad.addObject("itemsCustom", ic);
	//
	// // 商品修改页面
	// mad.setViewName("items/editItems");
	//
	// return mad;
	// }
	
	//required指定参数是否有必要传入
	//defaultvalue 若id未传入，则执行default的值
	@RequestMapping(value = "/editItems", method = { RequestMethod.POST, RequestMethod.GET })
	public String editItems(Model model,@RequestParam(value="id",required=true,defaultValue="1") Integer item_id) throws Exception {
		
		
		
		// 调用service查询商品信息根据id
		ItemsCustom ic = itemsService.findItemsById(item_id);
		if(ic==null){
			throw new CustomException("修改商品信息不存在！");
		}
		model.addAttribute("items", ic);
		
		return "items/editItems";
	}
	
	//商品信息查询,输出json
	//
	@RequestMapping("/itemsView/{id}")
	public @ResponseBody ItemsCustom itemsView(@PathVariable("id") Integer id) throws Exception{
		
		//调用service查询商品 
		ItemsCustom itemsCustom = 	itemsService.findItemsById(id);
		
		return itemsCustom;
	}
	// 商品信息修改提交
	//@Validated 和BindingResult是成对出现的
	//value={ValidGroup1.class}  指定使用ValidGroup1的分组校验，即该controller方法只对分组ValidGroup1响应校验
	//@ModelAttribute("items")  指定pojo回显到页面在request中的key
	@RequestMapping("/editItemsSubmit")
	public String editItemsSubmit(Model model,HttpServletRequest request,Integer id,
				@ModelAttribute("items") @Validated(value={ValidGroup1.class}) ItemsCustom itemsCustom,BindingResult bindingResult,
					MultipartFile items_pic) throws Exception {
		
		//获取校验错误信息
		if(bindingResult.hasErrors()){
			//输出错误信息
			List<ObjectError> allErrors = bindingResult.getAllErrors();
			for(ObjectError objectErrors:allErrors){
				System.out.println(objectErrors.getDefaultMessage()) ;
			
			}
			model.addAttribute("allErrors", allErrors);
			//model.addAttribute("items", itemsCustom);
			//出错重新定位到商品修改页面
			return "items/editItems";
		}
		String originalFilename=items_pic.getOriginalFilename();
		
		//上传图片    items_pic!=null&&
		if(originalFilename!=null&&originalFilename.length()>0){
			//存储图片的物理路径
			String pic_path= "D:/upload/tmp/";
			//新的图片名称
			String newfilename=UUID.randomUUID()+originalFilename.substring(originalFilename.lastIndexOf("."));	
			//新图片
			File newFile=new File(pic_path+newfilename);
			
			//将内存中的数据写入磁盘
			items_pic.transferTo(newFile); 
			
			//将新的图片名称写到itemsCustom中
			itemsCustom.setPic(newfilename); 
			
			
		}
		
		
		
		System.out.println("id1:"+request.getParameter("id"));
		System.out.println("name1:"+request.getParameter("name"));
		
		itemsService.updateItems(id, itemsCustom); 
			 
		
		// 调用service更新商品信息，页面需要将商品信息传到此方法
		// ...
		
		// ModelAndView mad = new ModelAndView();
		// mad.setViewName("success");
		// 重定向到商品列表

		// return "redirect:queryItems.action";
		//return "forward:queryItems.action";
		return "success";
		// return mad;
	}
	
	//批量删除商品信息（数组的绑定）
	@RequestMapping("/deleteItems")
	public String deleteItems(Integer[] items_id){ //和jsp页面呼应
		
		System.out.println(items_id);  
		
		//调用service批量删除
		//。。。
		
		
		return "success";
	}
	
	
	

}
